﻿using FlyingCircusWebIS.Relatorios.OcupacaoVooDSTableAdapters;
using Microsoft.Reporting.WebForms;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Relatorios
{
    /**
     * Geração de relatório
     * O mecanismo para popular o relatório é feito com base em DataSet,
     * Este mecanismo foi usado em partes com base no tutorial:
     * http://rafaelzaccanini.wordpress.com/2010/11/11/criando-relatorios-com-o-report-viewer/
     */
    public class GeradorRelatorios
    {

        public static byte[] GerarRelatorioOcupacao(int idVoo, string tipo, HttpServerUtilityBase server, out string nomeExtensaoArquivo, out string mimeType)
        {
            LocalReport lr = new LocalReport();
            lr.ReportPath = Path.Combine(server.MapPath("~/Relatorios"), "OcupacaoVoo.rdlc");

            VIEWOCUPACAOVOOTableAdapter tableAdapter = 
                new VIEWOCUPACAOVOOTableAdapter();

            OcupacaoVooDS.VIEWOCUPACAOVOODataTable dataTable
                = new OcupacaoVooDS.VIEWOCUPACAOVOODataTable();

            dataTable.Merge(tableAdapter.SelecionaOcupacaoPorVooId(idVoo));

            ReportDataSource rtDataSource = new ReportDataSource("OcupacaoVooDS", dataTable.AsEnumerable());
            lr.DataSources.Add(rtDataSource);

            tableAdapter.Dispose();
            dataTable.Dispose();

            string deviceInfo =
            "<DeviceInfo>" +
            "  <OutputFormat>" + tipo + "</OutputFormat>" +
            "  <PageWidth>8.5in</PageWidth>" +
            "  <PageHeight>11in</PageHeight>" +
            "  <MarginTop>0.5in</MarginTop>" +
            "  <MarginLeft>1in</MarginLeft>" +
            "  <MarginRight>1in</MarginRight>" +
            "  <MarginBottom>0.5in</MarginBottom>" +
            "</DeviceInfo>";

            string encoding;
            Warning[] warnings;
            string[] streams;

            byte[] bytesRenderizados;
            bytesRenderizados = lr.Render(
                tipo,
                deviceInfo,
                out mimeType,
                out encoding,
                out nomeExtensaoArquivo,
                out streams,
                out warnings);

            return bytesRenderizados;
        }
    }
}